package br.com.virtual.cadastrar.service.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.virtual.base.enums.ActionFormEnum;
import br.com.virtual.base.exceptions.VirtualValidationException;
import br.com.virtual.cadastrar.dao.PessoaFisicaDAO;
import br.com.virtual.cadastrar.model.PessoaFisica;
import br.com.virtual.cadastrar.service.PessoaFisicaService;
import br.com.virtual.cadastrar.service.PessoaService;

@Stateless
@Local(PessoaFisicaService.class)
public class PessoaFisicaServiceImpl implements PessoaFisicaService {

	@Inject
	private PessoaFisicaDAO pessoaFisicaDAO;
	
	@EJB
	private PessoaService pessoaService;
 
	@Override
	public PessoaFisica create(PessoaFisica pessoaFisica)
			throws VirtualValidationException {
		
		pessoaFisica.setUsuario(pessoaService.persistirUsuario(pessoaFisica.getUsuario(), ActionFormEnum.CREATE));
		pessoaFisica.setInteresse(pessoaService.persistirInteresse(pessoaFisica.getInteresse(), ActionFormEnum.CREATE));
		pessoaFisica = pessoaFisicaDAO.create(pessoaFisica);
//		pessoaService.persistirEnderecos(pessoaFisica.getEnderecos(), ActionForm.CREATE);
		
		return pessoaFisica;
	}
	
	@Override
	public PessoaFisica read(Long id) {
		return pessoaFisicaDAO.read(id);
	}

	@Override
	public void update(PessoaFisica pessoaFisica)
			throws VirtualValidationException {
		
		pessoaService.persistirInteresse(pessoaFisica.getInteresse(), ActionFormEnum.UPDATE);
		pessoaService.persistirUsuario(pessoaFisica.getUsuario(), ActionFormEnum.UPDATE);
//		pessoaService.persistirEnderecos(pessoaFisica.getEnderecos(), ActionForm.UPDATE);
		
		pessoaFisicaDAO.update(pessoaFisica);
	}

	@Override
	public void delete(PessoaFisica pessoaFisica)
			throws VirtualValidationException {
		
		pessoaService.persistirInteresse(pessoaFisica.getInteresse(), ActionFormEnum.DELETE);
		pessoaService.persistirUsuario(pessoaFisica.getUsuario(), ActionFormEnum.DELETE);
		pessoaService.persistirEnderecos(pessoaFisica.getEnderecos(), ActionFormEnum.DELETE);
		
		pessoaFisicaDAO.delete(pessoaFisica);
	}

	@Override
	public List<PessoaFisica> getList() {

		return pessoaFisicaDAO.getList();
	}

	@Override
	public PessoaFisica carregar(Long id) {

		PessoaFisica pf = this.pessoaFisicaDAO.read(id);
		if (!pf.getEnderecos().isEmpty())
			pf.getEnderecos().get(0);

		return pf;
	}

	@Override
	public PessoaFisica findByCPF(String cpf) {

		return this.pessoaFisicaDAO.findByCPF(cpf);
	}
}

